import { dateFormatter } from './util.js'

// 粒度数组统计
export function formatData(data = [], particleSize) {
    let keys = 0,
        _data = [],
        month = null;
    for(let [_key, value] of data.entries()) {
        let _value = formatStringToTime(value[0]), date_value = _value;
        if(!month) {
            month = dateFormatter("YYYY-MM", _value);
        }

        if(particleSize == 'day' || 
           particleSize == 'week' && new Date(_value).getDay() == 0 || 
           particleSize == 'month' && dateFormatter("YYYY-MM", _value) != month) 
        {
            month = dateFormatter("YYYY-MM", _value)
            keys++;
        }

        if(!_data[keys]) {
            _data[keys] = [[], 0]; // [] - 存储日期, 0 // 总值 
        }
        _data[keys][1] = Math.round(value[1] + _data[keys][1]); // 计算总值

        if(particleSize == 'week') date_value = dateFormatter('YYYYMMDD', _value)
        if(_data[keys][0][0]) {
            _data[keys][0][1] = date_value  // 如果是周 月 不断更换直到最后一天, 因为只有周或月才会重复的keys
        } else {
            _data[keys][0].push(date_value) // 如果不是周 月 存储第第一天
        }
    }
    _data = _data.map(item => {
        if(particleSize == 'day') {
            //item[0] = formatStringToTime(item[0][0]) // 转时间戳
            item[0] = item[0][0]
        } else if(particleSize == 'week') {
            item[0] = item[0].join("-") // 转字符串
        } else if(particleSize == 'month') {
            item[0] = dateFormatter('YYYYMM', item[0][0]) // 转月份字符串
        }
        return item;
    })
    _data.sort()
    return _data;
}

export function formatStringToTime(str) {
    if(typeof str !== 'string') return str;
    return new Date(str.replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getTime()
}